package com.ltg.framework.util.pdf;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

import java.io.IOException;
import java.io.OutputStream;

public class WaterMarkUtils {
    public static void addWaterMark(byte[] bytes, OutputStream outputStream, String text, String imgFile) throws IOException, DocumentException {
        // 待加水印的文件
        PdfReader reader = new PdfReader(bytes);
        // 加完水印的文件
        PdfStamper stamper = new PdfStamper(reader, outputStream);
        // 设置字体
        BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); // 华文宋体
        // PDF总页数
        int total = reader.getNumberOfPages() + 1;
        // 水印透明度
        PdfGState gs = new PdfGState();
        gs.setFillOpacity(0.8f);
        gs.setStrokeOpacity(0.8f);
        // 循环对每页插入水印
        PdfContentByte content;
        for (int i = 1; i < total; i++) {
            Rectangle pageRect = stamper.getReader().getPageSizeWithRotation(i);
            float x = pageRect.getWidth() / 2;
            float y = pageRect.getHeight() / 2;
            // 水印在之前文本之上
            content = stamper.getOverContent(i);
            // 透明度
            content.setGState(gs);
            // 图片水印
            if (imgFile != null) {
                Image image = null;
                if (imgFile != null) {
                    image = Image.getInstance(imgFile);
                    image.setAbsolutePosition(x - 75, y - 60);
                    // 设置图片的显示大小
                    image.scaleToFit(25, 25);
                }
                content.addImage(image);
            }
            // 文字水印
            if (text != null) {
                content.beginText();
                // 设置颜色 默认为蓝色
                content.setColorFill(BaseColor.GRAY);
                // 设置字体及字号
                content.setFontAndSize(font, 40);
                // 设置起始位置
                content.setTextMatrix(x, y);
                // 字符间距
                content.setCharacterSpacing(2);
                // 中间水印
                content.showTextAligned(Element.ALIGN_LEFT, text, x - 45, y - 45, 45);
                content.endText();
            }
        }
        stamper.close();
        reader.close();
    }
}